草庐IT

TypeScript 运算符

全部标签

c++ - 如何在 C++ 中重载非交换运算符的两种可能性?

我目前正在为复数创建一个类,所以我想让它更容易,我允许像a=b+c这样的操作,而不是a=b.add(c)。例如,这是我对两个复数相加的实现://AnadditionoperatorforthecomplexnumbersComplexComplex::operator+(Complexn){returnComplex(this->real+n.real,this->imaginary+n.imaginary);}在此示例中,添加复数a+b与添加b+a具有相同的结果,因为它们应该如此。但是,在处理非交换运算符和整数时会出现问题。例如,除以整数或除以整数。我怎样才能做到:a=复数/整数和a

C++ 指针与数组的 [] 运算符比较?

我一直在阅读book这表示通过指针算法访问数组元素比[]运算符快得多。总之this代码比this快代码。书中没有说为什么。是否建议使用此类指针算法,即使它可以显着提高速度?#includeusingnamespacestd;intmain(){//yourcodegoesheredouble*array=newdouble[1000000];for(inti=0;iusingnamespacestd;intmain(){//yourcodegoesheredouble*array=newdouble[1000000];for(inti=0;i编辑:引自书第369页,倒数第二行Thepo

c++ - 为什么在运算符重载中允许返回构造函数?

为什么在运算符重载中允许返回构造函数?这是一个例子:ComplexComplex::operator*(constComplex&operand2)const{doubleReal=(real*operand2.real)-(imaginary*operand2.imaginary);doubleImaginary=(real*operand2.imaginary)+(imaginary*operand2.real);returnComplex(Real,Imaginary);}它似乎返回对象的构造函数而不是对象本身?它在那里返回什么?这似乎更有意义:ComplexComplex::o

c++ - 为什么在三元运算符的分支之间返回 lambda 对某些 lambda 有效?

我想根据某些条件选择一个lambda,但是对于某些lambda,编译器说lambda的类型在三元运算符的分支之间不匹配。编译以下代码:intflag=4;autoresult=flag%2?[](intx){returnx+x;}:[](intx){returnx*x;};但以下2个片段无法编译:intflag=4;autoresult=flag%2?[flag](intx){returnx+flag;}:[flag](intx){returnx-flag;};autoresult2=flag%2?[](autox){returnx+x;}:[](autox){returnx*x;};

c++ - 为什么我不能从派生类中调用基类运算符?

考虑这段代码,它试图从派生类运算符调用基类比较运算符:structBase{protected:int_a;booloperator==(constBase&other)const{return(_a==other._a);}};structDerived:publicBase{booloperator==(constDerived&other)const{returnstatic_cast(*this)==static_cast(other);}};intmain(){Derivedb1,b2;if(b1==b2);}这失败了:main.cpp:25:61:error:'boolBa

c++ - 如何重载不接受或不返回 ostream 的运算符 <<

原始问题我正在编写一个日志记录类,目标是能够做到这一点://threadoneLogger()目前我的Loggerheader看起来像这样:#pragmaonce;#includeclassLogger{public:Logger();~Logger();std::ostream*out_stream;};templateLogger&operator关于这个类的一些说明:跨平台兼容性不是问题。在Logger.cpp内部有一个单例类负责创建“真正的”ostream。Logger构造函数和析构函数执行必要的单例锁定。我有三个问题:如何让operator如何让operator如何添加特化,

C++:使用两种内在类型的运算符作为函数对象

我有一个类似vector的类,其中包含"T"类型的对象数组,我想实现4个算术运算符,它们将对每个项目应用运算://Constructorsandotherfunctionsareomittedforbrevity.templateclassVector{public://Addavaluetoeachitem:naiveimplementation.voidoperator+=(constT&){for(inti=0;i因为运算符将包含相同的样板代码(遍历每个元素并应用适当的操作),我想我可以概括它:templateclassVector{public:voidoperator+=(c

c++ - 如果我在使用新程序和结束程序分配数据后没有调用 delete 运算符,会发生什么情况?

如果我在使用new分配数据后没有调用delete操作符会发生什么。我知道已分配的数据在释放之前不可用,但在程序结束后?为什么PC看起来很恶心xD,我的意思是它很慢但是过了一段时间它的性能变得更好但不像程序执行之前那样?注意:我运行的是WindowsXP。 最佳答案 当程序结束时,它请求的所有内存(堆栈、堆等)都被操作系统要求。 关于c++-如果我在使用新程序和结束程序分配数据后没有调用delete运算符,会发生什么情况?,我们在StackOverflow上找到一个类似的问题:

c++ - + 运算符是否为原始类型重载?

已经重载的运算符>,=等被多次使用。我想到的一个例子是当我们添加字符串时说:stringname=string("munish")+"kumar";+运算符在字符串类中重载。但是当我们添加像1+2这样的数字时(看起来不像是重载的运算符调用)我只是想知道编译器是如何执行二进制加法的。我不需要太担心,如果编译器这样做的话,这只是我的好奇心。 最佳答案 原始类型不实现operator+,它实际上是一个名字很奇怪的函数。原始类型的加法由CPU指令执行,例如:addl%edx,(%eax)//thisaddstwointegralvalues

c++ - 是否可以创建指向函数的 `new` 运算符/构造函数的函数指针?

如果我想要参数化创建一个对象,我当然可以创建一个在特定类上调用new并传递指针的函数。我想知道是否可以跳过该步骤并将函数指针传递给new运算符本身。 最佳答案 boost::lambda提供functionwrappersfornewanddelete.这些可用于轻松地将new调用转换为函数对象。 关于c++-是否可以创建指向函数的`new`运算符/构造函数的函数指针?,我们在StackOverflow上找到一个类似的问题: https://stackover